package AppModel;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.hamcrest.core.IsNull;
import org.uqbar.commons.utils.Observable;

import dominio.CantidadDeExplosionesPorColor;
import dominio.Dificultad;
import dominio.Facil;
import dominio.Jugador;
import dominio.Nivel;
import dominio.Objetivo;
import Repositorio.*;

@Observable
public class ConfiguracionAppModel {

	private Jugador jugador;
	private List<Nivel> nivelesFiltrados = new ArrayList<Nivel>();
	private String nivelBuscar;
	
	public ConfiguracionAppModel(){
		Jugador jugador = new Jugador ("Sergio");
		Nivel chocotorta = new Nivel(new Facil(), "ChocoTorta", 6, 7, 120, 11);
		Nivel chocotorta2 = new Nivel(new Facil(), "ChocoTorta 2", 8, 12, 121, 15);

		chocotorta.agregarObjetivo(new CantidadDeExplosionesPorColor("Rojo", 3));
		chocotorta.agregarObjetivo(new CantidadDeExplosionesPorColor("Verde", 4));
		chocotorta2.agregarObjetivo(new CantidadDeExplosionesPorColor("Verde", 4));
		
		jugador.getNiveles().add(chocotorta);
		jugador.getNiveles().add(chocotorta2);
		
		this.setJugador(jugador);
	}
	

	public Jugador getJugador() {
		return jugador;
	}

	public void setJugador(Jugador jugador) {
		this.jugador = jugador;
	}

	public List<Dificultad> getDificultades(){
		return RepositorioDificultad.getInstance().getDificultades();
	}
	
	public List<Nivel> getNiveles(){
		List<Nivel> nivelesRetornar;
		if (this.nivelesFiltrados.size()>0){
			nivelesRetornar = this.nivelesFiltrados;
		}else{
			nivelesRetornar = this.jugador.getNiveles();
		}
		return nivelesRetornar;
	}
	
	public void buscarNiveles (){
	
	
	List<Nivel> nivelesEncontrados = new ArrayList<Nivel>();
	List<Nivel> niveles = this.getNiveles();
	for (Nivel nivel : niveles){
	  if (this.nivelBuscar != null && nivel.getNombre().contains(this.nivelBuscar)){
		  nivelesEncontrados.add(nivel);
	  }
	}
	 this.nivelesFiltrados = nivelesEncontrados;
	}

	
	public String getNivelBuscar() {
		return nivelBuscar;
	}

	public void setNivelBuscar(String nivelBuscar) {
		this.nivelBuscar = nivelBuscar;
	}
	
	public void eliminarNivel(Nivel nivel){
				this.getJugador().getNiveles().remove(nivel);
	}
	

}
